雖然使用 typeof 檢查 function 會得到 function 的結果,但實際上 function 仍屬於 object 的一種。
可以把它想像成被呼叫的特殊物件 ( 值 )。
函式寫法會包含下面三部分:
// ----- 簡易範例
function myNmae(parm) {
return parm + parm;
}
// 呼叫函式,就會執行此函式
myNmae(5);
myNmae 部分,名稱可自訂名稱,也有可能沒有名稱,如下方定義函式的方式 - 函式表達式寫法。() 裡的內容,如有多個參數可使用逗號隔開,上方程式中 parm。{} 大括號中的內容。上方範例為函式宣告與呼叫方式,「 透過名為 myName 的關鍵字來宣告函式 」&「 透過 myNmae(5); 呼叫 myName 函式 」,myName 函式裡的 parm 的值就會是 myNmae(5); 傳進來的 5,而 parm + parm 結果就會是 10。
最後透過 return 回傳結果,如果沒有 return 回傳預設會回傳 undefined。
function myName(parm){
return parm + parm;
}
myName(5); //10
函式宣告的方式較常使用。
// 變數名稱 = function(參數){…}
// 將函式透過 = 來指定給某個變數
const myName = function(parm) {
return parm + parm;
}
myName(5); //10
與函式宣告不同,函式表達式 function 後方沒有名稱,也可稱「 匿名函式 」,但如果要加名稱也是可以,但它就只會在「 自己函式的區塊內 」也就是 {} 內有效。
new Function 建立函式// 透過 new 來建立 Function 物件
let myName = new Function('parm1', 'parm2', ' return parm1 + parm2 ');
myName(5, 5); // 10
new Function 建立的函式物件,每次執行都會進行解析字串的動作 ( 'return parm1 + parm2' ) ,所以效能較差,實務上較少使用。
陳述式 Statement → 不會回傳值。
表達式 Expression → 會回傳一個值。
JavaScript 語法基本上分為「 陳述式 statement 」與「 表達式 expression 」兩大類。
陳述式 ( statement ) 大多是一個片段或幾個詞彙,其中也會混用到表達式 ( statement ) 的詞彙。運作上表達式 ( statement ) 可以獨立出現,也可以與陳述式 ( statement ) 混用。
// 使用函式陳述式宣告一個函式,但運行後回傳結果為表達式
function number() {
return 5;
}
// 呼叫函式,回傳結果
number();
JavaScript 的語句類型,用於命令執行指定的一系列操作,最大的特徵是「 不會回傳結果 」。
陳述式不會回傳結果,所以無法賦予值在其他變數上,會顯示錯誤訊息。
// 錯誤寫法:把 statement 賦予在 expression 上會顯示錯誤訊息,如下
var ming;
ming = if (1 === 1){
console.log('55');
};

如果程式碼中只有 {} 是物件不會是陳述式,需要在 {} 裡面加入程式碼才會變成陳述式。另外下方範例中 {} 內使用 var 宣告,外層可讀取到變數,但使用 let、const 外層是無法讀取到內層的 ming 變數。可參考後天的 「 Day 14 | 關於 let、 const、var 」文章。
// --- 正確寫法
{
var ming = '小明';
}
// --- 錯誤寫法:陳述式不會回傳值所以不能賦予在變數上
var a = {
var ming = '小明';
}
// --- 正確寫法
var a = {
ming = '小明';
}
// 注意:下面兩種寫法所呈現出來的意思是完全不同的
//--- 陳述式
{
let ming = '小明';
}
//--- 物件實字
let a = {
ming = '小明';
}
var、let、const、function )if .. else、switch …for )// 陳述式們
var a;
{
let ming = '小明';
}
+、負號 -、遞增 ++、遞減 —- )% )==、===、!=、!==、 > 、< 、<= 、>= )&&、||、! )// 表達式
1 === 1
5 + 6
Function Statement 會直接宣告一個函式
var、let、const ) 來定義一個函式。function callName(){ }
Function Expression 會先宣告變數,再賦予值。
為變數宣告,先會宣告一個變數,並用等號把後方的函式賦予到前面宣告的變數上。
var callName = function(){}